from fasc_api.client.service_client import ServiceClient
from fasc_api.client.sign_task_client import SignTaskClient
from fasc_api.exception.exceptions import ClientException
from fasc_api.exception.exceptions import ServerException

from init_demo_data import InitDemoData
api_client = InitDemoData.api_client
access_token = ServiceClient.get_access_token_value(api_client)
api_client.set_access_token(access_token)


# 创建签署任务
def create_demo():
    try:
        data = {
            'signTaskSubject': '签署任务主题',
            'initiator':{
                'idType': '主体类型：<br />corp: 企业<br />person: 个人',
                'openCorpId': '如果idType为corp：该参数为必填，代表应用系统上的企业用户，主体方是openCorpId所指定的企业；<br />如果idType为person：忽略该参数。',
                'openUserId': '如果idType为corp：该参数是可选参数，表示openCorpId所代表企业的成员用户(即企业经办人)。**注意：有些场景只关注企业主体信息，该参数不会生效**；<br />如果idType为person：该参数为必填，表示主体方是openUserId所指定的个人用户。'
            },
            'expiresTime': '任务过期时间,格式为：[Unix标准时间戳](#时间标签取值说明)，精确到毫秒。该参数时间是未来时间，且和当前时间差不可小于10分钟(600000) 。',
            # 是否自动发起: True/False
            'autoInitiate': False,
            # 全部必填控件填写完成后是否自动定稿：True/False
            'autoFillFinalize': True,
            # 所有签署方签署完成后，签署任务是否自动结束：True/False
            'autoFinish': True,
            # 填写流程是否有序：True/False
            'fillInOrder': True,
            # 签署流程是否有序：True/False
            'signInOrder': True,
            'businessScene': {
                'businessId': '业务场景标识',
                'transReferenceId': '业务参考号，由应用系统基于自身业务上下文提供。'
            },
            'docs': [{
                # 在该签署任务内指定文档序号
                'docId': 1,
                'docName': '指定在本签署任务中的文档名称',
                'docFileId': '文档fileId。该参数和docTemplateId只能有一个，且必须有一个',
                'docTemplateId': '文档模板ID',
            }],
            'attachs': [
                {
                    'attachId': '在该签署任务内指定附件序号',
                    'attachName': '指定在本签署任务中的附件名称',
                    'attachFileId': '附件fileId'
                }
            ],
            'fillActors': [
                {
                    # 填写方信息
                    'fillActor': {
                        'actorType': '参与方类型：<br />filler: 填充方<br />signer: 签署方<br />cc: 抄送方。',
                        'actorId': '参与方标识',
                        'actorIdentType': '参与方主体类型：<br />corp: 企业<br />person: 个人',
                        # 个人用户参与方信息
                        'actorUser': {
                            'actorUserId': '个人参与方的openUserId'
                        },
                        # 企业参与方信息
                        'actorCorp': {
                            'actorCorpId': '企业参与方的openCorpId。对于外部参与方，此参数无效。',
                            'corpIdentInfo': {
                                'corpName': '企业名称全称',
                                'corpIdentType': '企业组织类型: corp: 企业, individual_biz: 个体工商户, government: 政府和事业单位, other: 其他类型。',
                                'corpIdentNo': '企业统一社会信用代码或各种类型组织的唯一代码',
                                'legalRepName': '法定代表人名称(Legal Representative Name)'
                            },
                            'corpInfoExtend':{
                                'bankName': '企业对公银行账户开户行名称',
                                'bankBranchName': '企业对公银行账户开户行支行名称',
                                'bankAccountNo': '企业对公银行帐户号 ',
                                'bankProvinceName': '企业对公银行帐户银行所在省份',
                                'bankCityName': '企业对公银行帐户银行所在市'
                            },
                            'operatorId': '企业经办人的openUserId。对于外部参与方，此参数无效。',
                            'operatorIdentInfo': {
                                'userName': '个人用户真实姓名',
                                'identType': '证件类型 ：id_card: 身份证 , passport: 护照 , hk_macao: 港澳居民来往内地通行证 , taiwan: 台湾居民来往大陆通行证, 只有携带这个参数，identNo参数才有效。',
                                'identNo': '证件号'
                            },
                            'operatorInfoExtend': {
                                'bankAccountNo': '个人银行账户号',
                                'mobile': '个人实名手机号'
                            }
                        },
                        # 定义是否及如何向该参与方发送通知
                        'notification': {
                            # 是否需要法大大平台发送通知：True/False
                            'sendNotification': True,
                            'notifyWay': '通知方式：<br />mobile: 手机<br />email: 邮箱。',
                            'notifyAddress': '通知地址，手机号或邮箱地址，和通知方式匹配一致，长度最大100个字符。'
                        }
                    },
                    # 参与序号
                    'orderNo': 1,
                    'actorFields':[
                        {
                            # 控件所在的文档编号。
                            'fieldDocId': 1,
                            'fieldId': '控件编码',
                            'fieldName': '控件名称(不推荐)',
                            'fieldValue': '控件缺省填充值'
                        }

                    ]
                }
            ],
            'signActors': [
                {
                    # 签署方信息。必须设置Actor.actorType=signer。
                    'signActor': {

                        'actorType': '参与方类型：<br />filler: 填充方<br />signer: 签署方<br />cc: 抄送方。',
                        'actorId': '参与方标识',
                        'actorIdentType': '参与方主体类型：<br />corp: 企业<br />person: 个人',
                        # 个人用户参与方信息
                        'actorUser': {
                            'actorUserId': '个人参与方的openUserId'
                        },
                        # 企业参与方信息
                        'actorCorp': {
                            'actorCorpId': '企业参与方的openCorpId。对于外部参与方，此参数无效。',
                            'corpIdentInfo': {
                                'corpName': '企业名称全称',
                                'corpIdentType': '企业组织类型: corp: 企业, individual_biz: 个体工商户, government: 政府和事业单位, other: 其他类型。',
                                'corpIdentNo': '企业统一社会信用代码或各种类型组织的唯一代码',
                                'legalRepName': '法定代表人名称(Legal Representative Name)'
                            },
                            'corpInfoExtend': {
                                'bankName': '企业对公银行账户开户行名称',
                                'bankBranchName': '企业对公银行账户开户行支行名称',
                                'bankAccountNo': '企业对公银行帐户号 ',
                                'bankProvinceName': '企业对公银行帐户银行所在省份',
                                'bankCityName': '企业对公银行帐户银行所在市'
                            },
                            'operatorId': '企业经办人的openUserId。对于外部参与方，此参数无效。',
                            'operatorIdentInfo': {
                                'userName': '个人用户真实姓名',
                                'identType': '证件类型 ：id_card: 身份证 , passport: 护照 , hk_macao: 港澳居民来往内地通行证 , taiwan: 台湾居民来往大陆通行证, 只有携带这个参数，identNo参数才有效。',
                                'identNo': '证件号'
                            },
                            'operatorInfoExtend': {
                                'bankAccountNo': '个人银行账户号',
                                'mobile': '个人实名手机号'
                            }
                        }
                    },
                    # 参与序号
                    'orderNo': 1,
                    # 当签署任务流转到此参与方时，是否暂时阻塞：True/False
                    'blockHere': False,
                    # 是否请求该签署方免验证签：True/False
                    'requestVerifyFree': True,
                    # 允许该参与方使用的身份和意愿确认方式：<br />sms: 短信验证码<br />face: 刷脸验证<br />email: 邮件验证码
                    'verifyMethods': ['sms', 'face', 'email'],
                    # 如果该签署方是企业，是否要求企业经办人签名：True/False
                    'corpOperatorSign': True,
                    'signerSignMethod': '签署方式：unlimited: 不限制 , standard: 使用标准签名 , hand_write: 使用手绘签名 ',
                    'actorFields': [
                        {
                            # 控件所在的文档编号
                            'fieldDocId': 1,
                            'fieldId': '控件编码',
                            'fieldName': '控件名称(不推荐)。'
                        }
                    ]
                }
            ]
        }
        res = SignTaskClient.create(api_client, data)
        print(res)
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())


# 创建签署任务 (基于签署模板)
def create_with_template_demo():
    try:
        data = {
            'signTaskSubject': '签署任务主题',
            'initiator':{
                'idType': '主体类型：<br />corp: 企业<br />person: 个人',
                'openCorpId': '如果idType为corp：该参数为必填，代表应用系统上的企业用户，主体方是openCorpId所指定的企业；<br />如果idType为person：忽略该参数。',
                'openUserId': '如果idType为corp：该参数是可选参数，表示openCorpId所代表企业的成员用户(即企业经办人)。**注意：有些场景只关注企业主体信息，该参数不会生效**；<br />如果idType为person：该参数为必填，表示主体方是openUserId所指定的个人用户。'
            },
            'expiresTime': '任务过期时间,格式为：[Unix标准时间戳](#时间标签取值说明)，精确到毫秒。该参数时间是未来时间，且和当前时间差不可小于10分钟(600000) 。',
            # 是否自动发起: True/False
            'autoInitiate': False,
            # 全部必填控件填写完成后是否自动定稿：True/False
            'autoFillFinalize': True,
            # 所有签署方签署完成后，签署任务是否自动结束：True/False
            'autoFinish': True,
            'businessScene': {
                'businessId': '业务场景标识',
                'transReferenceId': '业务参考号，由应用系统基于自身业务上下文提供。'
            },
            'signTemplateId': '指定签署模板ID',
            'fillActors': [
                {
                    # 填写方信息
                    'fillActor': {
                        'actorType': '参与方类型：<br />filler: 填充方<br />signer: 签署方<br />cc: 抄送方。',
                        'actorId': '参与方标识',
                        'actorIdentType': '参与方主体类型：<br />corp: 企业<br />person: 个人',
                        # 个人用户参与方信息
                        'actorUser': {
                            'actorUserId': '个人参与方的openUserId'
                        },
                        # 企业参与方信息
                        'actorCorp': {
                            'actorCorpId': '企业参与方的openCorpId。对于外部参与方，此参数无效。',
                            'corpIdentInfo': {
                                'corpName': '企业名称全称',
                                'corpIdentType': '企业组织类型: corp: 企业, individual_biz: 个体工商户, government: 政府和事业单位, other: 其他类型。',
                                'corpIdentNo': '企业统一社会信用代码或各种类型组织的唯一代码',
                                'legalRepName': '法定代表人名称(Legal Representative Name)'
                            },
                            'corpInfoExtend':{
                                'bankName': '企业对公银行账户开户行名称',
                                'bankBranchName': '企业对公银行账户开户行支行名称',
                                'bankAccountNo': '企业对公银行帐户号 ',
                                'bankProvinceName': '企业对公银行帐户银行所在省份',
                                'bankCityName': '企业对公银行帐户银行所在市'
                            },
                            'operatorId': '企业经办人的openUserId。对于外部参与方，此参数无效。',
                            'operatorIdentInfo': {
                                'userName': '个人用户真实姓名',
                                'identType': '证件类型 ：id_card: 身份证 , passport: 护照 , hk_macao: 港澳居民来往内地通行证 , taiwan: 台湾居民来往大陆通行证, 只有携带这个参数，identNo参数才有效。',
                                'identNo': '证件号'
                            },
                            'operatorInfoExtend': {
                                'bankAccountNo': '个人银行账户号',
                                'mobile': '个人实名手机号'
                            }
                        },
                        # 定义是否及如何向该参与方发送通知
                        'notification': {
                            # 是否需要法大大平台发送通知：True/False
                            'sendNotification': True,
                            'notifyWay': '通知方式：<br />mobile: 手机<br />email: 邮箱。',
                            'notifyAddress': '通知地址，手机号或邮箱地址，和通知方式匹配一致，长度最大100个字符。'
                        }
                    },
                    'actorFields':[
                        {
                            # 控件所在的文档编号。
                            'fieldDocId': 1,
                            'fieldId': '控件编码',
                            'fieldName': '控件名称(不推荐)',
                            'fieldValue': '控件缺省填充值'
                        }
                    ]
                }
            ],
            'signActors': [
                {
                    # 签署方信息。必须设置Actor.actorType=signer。
                    'signActor': {

                        'actorType': '参与方类型：<br />filler: 填充方<br />signer: 签署方<br />cc: 抄送方。',
                        'actorId': '参与方标识',
                        'actorIdentType': '参与方主体类型：<br />corp: 企业<br />person: 个人',
                        # 个人用户参与方信息
                        'actorUser': {
                            'actorUserId': '个人参与方的openUserId'
                        },
                        # 企业参与方信息
                        'actorCorp': {
                            'actorCorpId': '企业参与方的openCorpId。对于外部参与方，此参数无效。',
                            'corpIdentInfo': {
                                'corpName': '企业名称全称',
                                'corpIdentType': '企业组织类型: corp: 企业, individual_biz: 个体工商户, government: 政府和事业单位, other: 其他类型。',
                                'corpIdentNo': '企业统一社会信用代码或各种类型组织的唯一代码',
                                'legalRepName': '法定代表人名称(Legal Representative Name)'
                            },
                            'corpInfoExtend': {
                                'bankName': '企业对公银行账户开户行名称',
                                'bankBranchName': '企业对公银行账户开户行支行名称',
                                'bankAccountNo': '企业对公银行帐户号 ',
                                'bankProvinceName': '企业对公银行帐户银行所在省份',
                                'bankCityName': '企业对公银行帐户银行所在市'
                            },
                            'operatorId': '企业经办人的openUserId。对于外部参与方，此参数无效。',
                            'operatorIdentInfo': {
                                'userName': '个人用户真实姓名',
                                'identType': '证件类型 ：id_card: 身份证 , passport: 护照 , hk_macao: 港澳居民来往内地通行证 , taiwan: 台湾居民来往大陆通行证, 只有携带这个参数，identNo参数才有效。',
                                'identNo': '证件号'
                            },
                            'operatorInfoExtend': {
                                'bankAccountNo': '个人银行账户号',
                                'mobile': '个人实名手机号'
                            }
                        }
                    },
                    # 当签署任务流转到此参与方时，是否暂时阻塞：True/False
                    'blockHere': False,
                    # 是否请求该签署方免验证签：True/False
                    'requestVerifyFree': True,
                    # 允许该参与方使用的身份和意愿确认方式：<br />sms: 短信验证码<br />face: 刷脸验证<br />email: 邮件验证码
                    'verifyMethods': ['sms', 'face', 'email']
                }
            ],
            'ccActors': []
        }
        res = SignTaskClient.create_with_template(api_client, data)
        print(res)
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())


# 添加签署任务文档
def add_docs_demo():
    try:
        data = {
            'signTaskId': '签署任务ID',
            'docs': [
                {
                    # 在该签署任务内指定文档序号
                    'docId': 1,
                    'docName': '指定在本签署任务中的文档名称',
                    'docFileId': '文档fileId',
                    'docTemplateId': '文档模板ID',
                    # 可在文档中添加一些控件
                    'docFields': []
                }
            ]
        }
        res = SignTaskClient.add_docs(api_client, data)
        print(res)
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())


# 移除签署任务文档
def delete_docs_demo():
    try:
        data = {
            'signTaskId': '签署任务ID',
            # 文档序号docId列表
            'docIds': [1,2,3]
        }
        res = SignTaskClient.delete_docs(api_client, data)
        print(res)
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())


# 添加签署任务控件
def add_fields_demo():
    try:
        data = {
            'signTaskId': '签署任务ID',
            'fields': [
                {
                    # 文档序号
                    'docId': 1,
                    'docFields': [
                        {
                            'fieldId': '控件编码',
                            'fieldName': '控件名称',
                            'position': {
                                'positionMode': '定位模式：pixel: 像素值，keyword: 关键字定位。',
                                'positionPageNo': '定位页码',
                                'positionX': '中心点定位坐标横向偏移量',
                                'positionY': '中心点定位坐标纵向偏移量',
                                'positionKeyword': '关键字定位'
                            },
                            'fieldType': '控件类型'
                        }
                    ]
                }
            ]
        }
        res = SignTaskClient.add_fields(api_client, data)
        print(res)
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())


# 移除签署任务控件
def delete_fields_demo():
    try:
        data = {
            'signTaskId': '签署任务ID',
            'fields': [
                {
                    # 指定文档序号
                    'docId': 1,
                    # 上述docId中的控件编码列表。
                    'fieldIds': ['xxxx']
                }
            ]
        }
        res = SignTaskClient.delete_fields(api_client, data)
        print(res)
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())

# 获取签署任务控件设置链接
def get_fields_edit_url_demo():
    try:
        data = {
            'signTaskId': '签署任务ID',
            'openUserId': '该页面的实际操作人的openUserId。',
            'userIdentInfo': {
                'userName': '个人用户真实姓名',
                'identType': '证件类型 ：id_card: 身份证 , passport: 护照 , hk_macao: 港澳居民来往内地通行证 , taiwan: 台湾居民来往大陆通行证, 只有携带这个参数，identNo参数才有效。',
                'identNo': '证件号'
            },
            'userInfoExtend': {
                'bankAccountNo': '个人银行账户号',
                'mobile': '个人实名手机号'
            },
            'redirectUrl': '重定向地址'
        }
        res = SignTaskClient.get_fields_edit_url(api_client, data)
        print(res)
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())

# 填写签署任务控件内容
def fill_fields_value_demo():
    try:
        data = {
            'signTaskId': '签署任务ID',
            'docFieldValues': [
                {
                    # 文档序号
                    'docId': 0,
                    'fieldId': '填写控件Id',
                    'fieldValue': '填写控件填充值'
                }
            ]
        }
        res = SignTaskClient.fill_fields_value(api_client, data)
        print(res)
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())


# 添加签署任务附件
def add_attachs_demo():
    try:
        data = {
            'signTaskId': '签署任务ID',
            'attachs': [
                {
                    # 附件序号
                    'attachId': 1,
                    'attachName': '附件名称',
                    'attachFileId': '附件文件id'
                }
            ]
        }
        res = SignTaskClient.add_attachs(api_client, data)
        print(res)
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())


# 移除签署任务附件
def delete_attachs_demo():
    try:
        data = {
            'signTaskId': '签署任务ID',
            #附件序号attachId列表
            'attachIds': [1]
        }
        res = SignTaskClient.delete_attachs(api_client, data)
        print(res)
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())



# 添加签署任务参与方
def add_actors_demo():
    try:
        data = {
            'signTaskId': '签署任务ID',
            'fillActors': [
                {
                    'fillActor': {
                        'actorType': 'filler',
                        'actorId': 'filler02',
                        'actorIdentType': 'person',
                        'notification': {
                            'sendNotification': True,
                            'notifyWay': 'mobile',
                            'notifyAddress': 'xxxx'
                        }
                    },
                    'orderNo': 2
                }
            ],
            'signActors': [
                {
                    'signActor': {
                        'actorType': 'signer',
                        'actorId': 'signer03',
                        'actorIdentType': 'person',
                        'notification': {
                            'sendNotification': True,
                            'notifyWay': 'mobile',
                            'notifyAddress': 'xxxx'
                        }
                    },
                    'orderNo': 3,
                    'blockHere': False,
                    'requestVerifyFree': False,
                    'verifyMethods': ['sms', 'face', 'email'],
                    'corpOperatorSign': True,
                    'signerSignMethod': 'unlimited',
                }
            ],
            'ccActors': [
                {
                    'ccActor': {
                        'actorType': 'cc',
                        'actorId': 'cc01',
                        'actorIdentType': 'person',
                        'notification': {
                            'sendNotification': True,
                            'notifyWay': 'mobile',
                            'notifyAddress': 'xxxx'
                        }
                    }
                }
            ]
        }
        res = SignTaskClient.add_actors(api_client, data)
        print(res)
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())


# 移除签署任务参与方
def delete_actor_demo():
    try:
        data = {
            'signTaskId': '签署任务ID',
            'actorType': '参与方类型：filler: 填写方 , signer: 签署方, cc: 抄送方。',
            'actorIds': [
                '参与方在签署任务中被设定的唯一标识。'
            ]
        }
        res = SignTaskClient.delete_actor(api_client, data)
        print(res)
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())


# 发起签署任务
def initiate_demo():
    try:
        data = {
            'signTaskId': '签署任务ID'
        }
        res = SignTaskClient.initiate(api_client, data)
        print(res)
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())

# 撤销签署任务
def cancel_demo():
    try:
        data = {
            'signTaskId': '签署任务ID'
        }
        res = SignTaskClient.cancel(api_client, data)
        print(res)
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())

# 定稿签署任务文档
def finalize_docs_demo():
    try:
        data = {
            'signTaskId': '签署任务ID'
        }
        res = SignTaskClient.finalize_docs(api_client, data)
        print(res)
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())


# 撤销签署任务
def cancel_demo():
    try:
        data = {
            'signTaskId': '签署任务ID'
        }
        res = SignTaskClient.cancel(api_client, data)
        print(res)
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())

# 阻塞签署任务
def block_demo():
    try:
        data = {
            'signTaskId': '签署任务ID',
            'actorType': '指定的参与方类型：signer: 签署方',
            'actorId': '指定的参与方在本签署任务中的标识。'
        }
        res = SignTaskClient.block(api_client, data)
        print(res)
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())


# 解阻签署任务
def unblock_demo():
    try:
        data = {
            'signTaskId': '签署任务ID',
            'actorType': '指定的参与方类型：signer: 签署方',
            'actorId': '指定的参与方在本签署任务中的标识'
        }
        res = SignTaskClient.unblock(api_client, data)
        print(res)
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())

# 催办签署任务
def urge_demo():
    try:
        data = {
            'signTaskId': '签署任务ID'
        }
        res = SignTaskClient.urge(api_client, data)
        print(res)
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())


# 结束签署任务
def finish_demo():
    try:
        data = {
            'signTaskId': '签署任务ID'
        }
        res = SignTaskClient.finish(api_client, data)
        print(res)
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())


# 获取签署任务详情
def get_detail_demo():
    try:
        data = {
            'signTaskId': '签署任务ID'
        }
        res = SignTaskClient.get_detail(api_client, data)
        print(res)
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())


# 下载签署任务文档
def download_files_demo():
    try:
        data = {
            'signTaskId': '签署任务ID',
            'fileType': '文档类型：doc：签署任务中的文档 , attach：签署任务中的附件。',
            'id': '指定签署任务中的docId或attachId'
        }
        res = SignTaskClient.download_docs(api_client, data)
        # 文件名可能为单个文件 或 压缩包
        filename = res.headers['Content-Disposition'].split(';')[1].replace('filename=', '')
        f = open(filename, 'wb')  # 若是'wb'就表示写二进制文件
        for chunk in res.iter_content(chunk_size=1024):
            if chunk:
                f.write(chunk)
        f.close()
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())

# 获取签署任务链接
def get_url_demo():
    try:
        data = {
            'signTaskId': '签署任务ID',
            'actorType': '参与方或发起方类型：initiator: 发起方 , filler: 填写方 , signer: 签署方 , cc: 抄送方。',
            'actorId': '参与方在签署任务中被设定的唯一标识。',
            'redirectUrl': '重定向地址'
        }
        res = SignTaskClient.get_url(api_client, data)
        print(res)
    except ClientException as e:
        print(e.__str__())
    except ServerException as e:
        print(e.__str__())


if __name__ == '__main__':
    # 签署任务创建
    create_demo()
    create_with_template_demo()
    # 签署任务准备
    add_docs_demo()
    delete_docs_demo()
    add_fields_demo()
    delete_fields_demo()
    get_fields_edit_url_demo()
    fill_fields_value_demo()
    add_attachs_demo()
    delete_attachs_demo()
    add_actors_demo()
    delete_actor_demo()
    # 签署任务流转
    initiate_demo()
    cancel_demo()
    finalize_docs_demo()
    block_demo()
    unblock_demo()
    urge_demo()
    finish_demo()
    # 签署任务获取
    get_detail_demo()
    download_files_demo()
    get_url_demo()
